{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.018005,
     "end_time": "2021-02-19T01:06:02.860216",
     "exception": false,
     "start_time": "2021-02-19T01:06:02.842211",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "Paper:   [SAINT+: Integrating Temporal Features for EdNet Correctness Prediction](https://arxiv.org/abs/2010.12042)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.016508,
     "end_time": "2021-02-19T01:06:02.893437",
     "exception": false,
     "start_time": "2021-02-19T01:06:02.876929",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Import everything now..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19",
    "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5",
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:02.935343Z",
     "iopub.status.busy": "2021-02-19T01:06:02.934491Z",
     "iopub.status.idle": "2021-02-19T01:06:06.946053Z",
     "shell.execute_reply": "2021-02-19T01:06:06.944459Z"
    },
    "papermill": {
     "duration": 4.036181,
     "end_time": "2021-02-19T01:06:06.946224",
     "exception": false,
     "start_time": "2021-02-19T01:06:02.910043",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch import nn\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.metrics import roc_auc_score\n",
    "from sklearn.model_selection import train_test_split\n",
    "import torch\n",
    "import numpy as np \n",
    "from torch import nn \n",
    "import copy \n",
    "import pytorch_lightning as pl \n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from torch.utils.data import Dataset, DataLoader\n",
    "import gc\n",
    "from sklearn.model_selection import train_test_split \n",
    "from sklearn.metrics import roc_auc_score\n",
    "import torch.nn.functional as F\n",
    "import gc\n",
    "import random"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.022764,
     "end_time": "2021-02-19T01:06:06.993483",
     "exception": false,
     "start_time": "2021-02-19T01:06:06.970719",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Configure constants"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0",
    "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a",
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:07.049627Z",
     "iopub.status.busy": "2021-02-19T01:06:07.048806Z",
     "iopub.status.idle": "2021-02-19T01:06:07.051516Z",
     "shell.execute_reply": "2021-02-19T01:06:07.052475Z"
    },
    "papermill": {
     "duration": 0.036318,
     "end_time": "2021-02-19T01:06:07.052658",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.016340",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "class config:\n",
    "        device = torch.device(\"cuda\") \n",
    "        MAX_SEQ = 55\n",
    "        EMBED_DIMS = 512\n",
    "        ENC_HEADS = DEC_HEADS = 8\n",
    "        NUM_ENCODER = NUM_DECODER = 4\n",
    "        BATCH_SIZE = 256\n",
    "        #TRAIN_FILE = \"../input/riiid-test-answer-prediction/train.csv\"\n",
    "        TOTAL_EXE = 13523\n",
    "        TOTAL_CAT = 8\n",
    "        SAMPLE = 50000\n",
    "        EPOCHS = 10\n",
    "        lagtime = True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:07.129665Z",
     "iopub.status.busy": "2021-02-19T01:06:07.121494Z",
     "iopub.status.idle": "2021-02-19T01:06:07.137834Z",
     "shell.execute_reply": "2021-02-19T01:06:07.138544Z"
    },
    "papermill": {
     "duration": 0.063598,
     "end_time": "2021-02-19T01:06:07.138769",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.075171",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "42"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl.seed_everything(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:07.203709Z",
     "iopub.status.busy": "2021-02-19T01:06:07.202839Z",
     "iopub.status.idle": "2021-02-19T01:06:07.211996Z",
     "shell.execute_reply": "2021-02-19T01:06:07.213007Z"
    },
    "papermill": {
     "duration": 0.045308,
     "end_time": "2021-02-19T01:06:07.213162",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.167854",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "def feature_time_lag(df, time_dict):\n",
    "\n",
    "    tt = np.zeros(len(df), dtype=np.int64)\n",
    "\n",
    "    for ind, row in enumerate(df[['user_id','timestamp','task_container_id']].values):\n",
    "\n",
    "        if row[0] in time_dict.keys():\n",
    "            if row[2]-time_dict[row[0]][1] == 0:\n",
    "\n",
    "                tt[ind] = time_dict[row[0]][2]\n",
    "\n",
    "            else:\n",
    "                t_last = time_dict[row[0]][0]\n",
    "                task_ind_last = time_dict[row[0]][1]\n",
    "                tt[ind] = row[1]-t_last\n",
    "                time_dict[row[0]] = (row[1], row[2], tt[ind])\n",
    "        else:\n",
    "            # time_dict : timestamp, task_container_id, lag_time\n",
    "            time_dict[row[0]] = (row[1], row[2], -1)\n",
    "            tt[ind] =  0\n",
    "\n",
    "    df[\"time_lag\"] = tt\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:07.271745Z",
     "iopub.status.busy": "2021-02-19T01:06:07.270814Z",
     "iopub.status.idle": "2021-02-19T01:06:07.291802Z",
     "shell.execute_reply": "2021-02-19T01:06:07.292915Z"
    },
    "papermill": {
     "duration": 0.056682,
     "end_time": "2021-02-19T01:06:07.293070",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.236388",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "def reduce_mem_usage(df):\n",
    "    \"\"\" \n",
    "    iterate through all the columns of a dataframe and \n",
    "    modify the data type to reduce memory usage.        \n",
    "    \"\"\"\n",
    "    start_mem = df.memory_usage().sum() / 1024**2\n",
    "    print(('Memory usage of dataframe is {:.2f}' \n",
    "                     'MB').format(start_mem))\n",
    "    \n",
    "    for col in df.columns:\n",
    "        col_type = df[col].dtype\n",
    "        \n",
    "        if col_type != object:\n",
    "            c_min = df[col].min()\n",
    "            c_max = df[col].max()\n",
    "            if str(col_type)[:3] == 'int':\n",
    "                if c_min > np.iinfo(np.int8).min and c_max <\\\n",
    "                  np.iinfo(np.int8).max:\n",
    "                    df[col] = df[col].astype(np.int8)\n",
    "                elif c_min > np.iinfo(np.int16).min and c_max <\\\n",
    "                   np.iinfo(np.int16).max:\n",
    "                    df[col] = df[col].astype(np.int16)\n",
    "                elif c_min > np.iinfo(np.int32).min and c_max <\\\n",
    "                   np.iinfo(np.int32).max:\n",
    "                    df[col] = df[col].astype(np.int32)\n",
    "                elif c_min > np.iinfo(np.int64).min and c_max <\\\n",
    "                   np.iinfo(np.int64).max:\n",
    "                    df[col] = df[col].astype(np.int64)  \n",
    "            else:\n",
    "                if c_min > np.finfo(np.float16).min and c_max <\\\n",
    "                   np.finfo(np.float16).max:\n",
    "                    df[col] = df[col].astype(np.float16)\n",
    "                elif c_min > np.finfo(np.float32).min and c_max <\\\n",
    "                   np.finfo(np.float32).max:\n",
    "                    df[col] = df[col].astype(np.float32)\n",
    "                else:\n",
    "                    df[col] = df[col].astype(np.float64)\n",
    "        else:\n",
    "            df[col] = df[col].astype('category')\n",
    "    end_mem = df.memory_usage().sum() / 1024**2\n",
    "    print(('Memory usage after optimization is: {:.2f}' \n",
    "                              'MB').format(end_mem))\n",
    "    print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) \n",
    "                                             / start_mem))\n",
    "    \n",
    "    return df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.022367,
     "end_time": "2021-02-19T01:06:07.339096",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.316729",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:07.408976Z",
     "iopub.status.busy": "2021-02-19T01:06:07.398721Z",
     "iopub.status.idle": "2021-02-19T01:06:07.416553Z",
     "shell.execute_reply": "2021-02-19T01:06:07.416055Z"
    },
    "papermill": {
     "duration": 0.048706,
     "end_time": "2021-02-19T01:06:07.416671",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.367965",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "class DKTDataset(Dataset):\n",
    "  def __init__(self,samples,max_seq,start_token=0): \n",
    "    super().__init__()\n",
    "    self.samples = samples\n",
    "    self.max_seq = max_seq\n",
    "    self.start_token = start_token\n",
    "    self.data = []\n",
    "    for id in self.samples.index:\n",
    "      exe_ids,answers,ela_time,categories = self.samples[id]\n",
    "      if len(exe_ids)>max_seq:\n",
    "        self.data.extend([(exe_ids[l:l+self.max_seq],answers[l:l+self.max_seq],\n",
    "                                   ela_time[l:l+self.max_seq],categories[l:l+self.max_seq])\\\n",
    "                for l in range(len(exe_ids)) if l%self.max_seq==0])\n",
    "        #for l in range((len(exe_ids)+max_seq-1)//max_seq):\n",
    "        #    self.data.append((exe_ids[l:l+max_seq],answers[l:l+max_seq],ela_time[l:l+max_seq],categories[l:l+max_seq]))\n",
    "      elif len(exe_ids)<self.max_seq and len(exe_ids)>9:\n",
    "            self.data.append((exe_ids,answers,ela_time,categories))\n",
    "      else :\n",
    "            continue\n",
    "\n",
    "  def __len__(self):\n",
    "    return len(self.data)\n",
    "  \n",
    "  def __getitem__(self,idx):\n",
    "    question_ids,answers,ela_time,exe_category = self.data[idx]\n",
    "    seq_len = len(question_ids)\n",
    "\n",
    "    exe_ids = np.zeros(self.max_seq,dtype=int)\n",
    "    ans = np.zeros(self.max_seq,dtype=int)\n",
    "    elapsed_time = np.zeros(self.max_seq,dtype=int)\n",
    "    exe_cat = np.zeros(self.max_seq,dtype=int)\n",
    "    if seq_len<self.max_seq:\n",
    "      exe_ids[-seq_len:] = question_ids\n",
    "      ans[-seq_len:] = answers\n",
    "      elapsed_time[-seq_len:] = ela_time \n",
    "      exe_cat[-seq_len:] = exe_category\n",
    "    else:\n",
    "      exe_ids[:] = question_ids[-self.max_seq:]\n",
    "      ans[:] = answers[-self.max_seq:]\n",
    "      elapsed_time[:] = ela_time[-self.max_seq:]\n",
    "      exe_cat[:] = exe_category[-self.max_seq:]\n",
    "\n",
    "    #input_rtime = np.zeros(self.max_seq,dtype=int)\n",
    "    #input_rtime = np.insert(elapsed_time,0,self.start_token)\n",
    "    #input_rtime = np.delete(input_rtime,-1)\n",
    "    input_rtime = elapsed_time[:].copy()\n",
    "    input = {\"input_ids\":exe_ids,\"input_rtime\":input_rtime.astype(np.int),\"input_cat\":exe_cat}\n",
    "    answers = np.append([0],ans[:-1]) #start token\n",
    "    assert ans.shape[0]==answers.shape[0] and answers.shape[0]==input_rtime.shape[0], \"both ans and label should be \\\n",
    "                                                                                            same len with start-token\"\n",
    "    return input,answers,ans\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.022322,
     "end_time": "2021-02-19T01:06:07.456796",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.434474",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# SAINT+ model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:07.516700Z",
     "iopub.status.busy": "2021-02-19T01:06:07.515861Z",
     "iopub.status.idle": "2021-02-19T01:06:07.547662Z",
     "shell.execute_reply": "2021-02-19T01:06:07.548707Z"
    },
    "papermill": {
     "duration": 0.069782,
     "end_time": "2021-02-19T01:06:07.548856",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.479074",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "class FFN(nn.Module):\n",
    "  def __init__(self,in_feat):\n",
    "    super(FFN,self).__init__()\n",
    "    self.linear1 = nn.Linear(in_feat,in_feat)\n",
    "    self.linear2 = nn.Linear(in_feat,in_feat)\n",
    "    #self.drop = nn.Dropout(0.2)\n",
    "  \n",
    "  def forward(self,x):\n",
    "    #out = F.relu(self.drop(self.linear1(x)))\n",
    "    out = F.relu(self.linear1(x))\n",
    "    out = self.linear2(out)\n",
    "    return out \n",
    "\n",
    "\n",
    "class EncoderEmbedding(nn.Module):\n",
    "  def __init__(self,n_exercises,n_categories,n_dims,seq_len):\n",
    "    super(EncoderEmbedding,self).__init__()\n",
    "    self.n_dims = n_dims\n",
    "    self.seq_len = seq_len\n",
    "    self.exercise_embed = nn.Embedding(n_exercises,n_dims)\n",
    "    self.category_embed = nn.Embedding(n_categories,n_dims)\n",
    "    self.position_embed = nn.Embedding(seq_len,n_dims)\n",
    "\n",
    "  def forward(self,exercises,categories):\n",
    "    e = self.exercise_embed(exercises)\n",
    "    c = self.category_embed(categories)\n",
    "    seq = torch.arange(self.seq_len,device=config.device).unsqueeze(0)\n",
    "    p = self.position_embed(seq)\n",
    "    return p + c + e\n",
    "\n",
    "class DecoderEmbedding(nn.Module):\n",
    "  def __init__(self,n_responses,n_dims,seq_len):\n",
    "    super(DecoderEmbedding,self).__init__()\n",
    "    self.n_dims = n_dims\n",
    "    self.seq_len = seq_len\n",
    "    self.response_embed = nn.Embedding(n_responses,n_dims)\n",
    "    self.time_embed = nn.Linear(1,n_dims,bias=False)\n",
    "    self.position_embed = nn.Embedding(seq_len,n_dims)\n",
    "\n",
    "  def forward(self,responses):\n",
    "    e = self.response_embed(responses)\n",
    "    seq = torch.arange(self.seq_len,device=config.device).unsqueeze(0)\n",
    "    p = self.position_embed(seq)\n",
    "    return p + e \n",
    "\n",
    "\n",
    "# layers of encoders stacked onver, multiheads-block in each encoder is n.\n",
    "# Stacked N MultiheadAttentions \n",
    "class StackedNMultiHeadAttention(nn.Module):\n",
    "  def __init__(self,n_stacks,n_dims,n_heads,seq_len,n_multihead=1,dropout=0.0):\n",
    "    super(StackedNMultiHeadAttention,self).__init__()\n",
    "    self.n_stacks = n_stacks\n",
    "    self.n_multihead = n_multihead\n",
    "    self.n_dims = n_dims \n",
    "    self.norm_layers = nn.LayerNorm(n_dims)\n",
    "    #n_stacks has n_multiheads each\n",
    "    self.multihead_layers = nn.ModuleList(n_stacks*[nn.ModuleList(n_multihead*[nn.MultiheadAttention(embed_dim = n_dims,\n",
    "                                                      num_heads = n_heads,\n",
    "                                                        dropout = dropout),]),])\n",
    "    self.ffn = nn.ModuleList(n_stacks*[FFN(n_dims)])\n",
    "    self.mask = torch.triu(torch.ones(seq_len,seq_len),diagonal=1).to(dtype=torch.bool)\n",
    "  \n",
    "  def forward(self,input_q,input_k,input_v,encoder_output=None,break_layer=None):\n",
    "    for stack in range(self.n_stacks):\n",
    "        for multihead in range(self.n_multihead):\n",
    "          norm_q = self.norm_layers(input_q)\n",
    "          norm_k = self.norm_layers(input_k)\n",
    "          norm_v = self.norm_layers(input_v) \n",
    "          heads_output,_ = self.multihead_layers[stack][multihead](query=norm_q.permute(1,0,2),\n",
    "                                                                    key=norm_k.permute(1,0,2),\n",
    "                                                                    value=norm_v.permute(1,0,2),\n",
    "                                                                    attn_mask=self.mask.to(config.device))\n",
    "          heads_output = heads_output.permute(1,0,2)\n",
    "          #assert encoder_output != None and break_layer is not None     \n",
    "          if encoder_output != None and multihead == break_layer:\n",
    "            assert break_layer <= multihead, \" break layer should be less than multihead layers and postive integer\"\n",
    "            input_k = input_v = encoder_output\n",
    "            input_q =input_q + heads_output\n",
    "          else:\n",
    "            input_q =input_q+ heads_output\n",
    "            input_k =input_k+ heads_output\n",
    "            input_v =input_v +heads_output\n",
    "        last_norm = self.norm_layers(heads_output)\n",
    "        ffn_output = self.ffn[stack](last_norm)\n",
    "        ffn_output =ffn_output+ heads_output\n",
    "    return ffn_output\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.023202,
     "end_time": "2021-02-19T01:06:07.598037",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.574835",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Final Model with Trainer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:07.655957Z",
     "iopub.status.busy": "2021-02-19T01:06:07.654922Z",
     "iopub.status.idle": "2021-02-19T01:06:07.717862Z",
     "shell.execute_reply": "2021-02-19T01:06:07.718907Z"
    },
    "papermill": {
     "duration": 0.097274,
     "end_time": "2021-02-19T01:06:07.719045",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.621771",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Main model for training \n",
    "class PlusSAINTModule(pl.LightningModule):\n",
    "  def __init__(self):\n",
    "    super(PlusSAINTModule,self).__init__()\n",
    "    self.loss = nn.BCEWithLogitsLoss()\n",
    "    self.encoder_layer = StackedNMultiHeadAttention(n_stacks=config.NUM_DECODER,\n",
    "                                                    n_dims=config.EMBED_DIMS,\n",
    "                                                    n_heads=config.DEC_HEADS,\n",
    "                                                    seq_len=config.MAX_SEQ,\n",
    "                                                    n_multihead=1,dropout=0.0)\n",
    "    self.decoder_layer = StackedNMultiHeadAttention(n_stacks=config.NUM_ENCODER,\n",
    "                                                    n_dims=config.EMBED_DIMS,\n",
    "                                                    n_heads=config.ENC_HEADS,\n",
    "                                                    seq_len=config.MAX_SEQ,\n",
    "                                                    n_multihead=2,dropout=0.0)\n",
    "    self.encoder_embedding = EncoderEmbedding(n_exercises=config.TOTAL_EXE,\n",
    "                                              n_categories=config.TOTAL_CAT,\n",
    "                                              n_dims=config.EMBED_DIMS,seq_len=config.MAX_SEQ)\n",
    "    self.decoder_embedding = DecoderEmbedding(n_responses=3,n_dims=config.EMBED_DIMS,seq_len=config.MAX_SEQ)\n",
    "    self._time = nn.Linear(1,config.EMBED_DIMS)\n",
    "    self.fc = nn.Linear(config.EMBED_DIMS,1)\n",
    "\n",
    "  #TODO: implement embdding layer and its output\n",
    "  def forward(self,x,y): \n",
    "    enc = self.encoder_embedding(exercises=x[\"input_ids\"].long().to(config.device),categories=x['input_cat'].long().to(config.device))\n",
    "    dec = self.decoder_embedding(responses=y.long().to(config.device))\n",
    "    _time=x[\"input_rtime\"].unsqueeze(-1).float()\n",
    "    time = self._time(_time)\n",
    "    dec = dec + time\n",
    "    #this is encoder \n",
    "    encoder_output = self.encoder_layer(input_k=enc,\n",
    "                                        input_q=enc,\n",
    "                                        input_v=enc)\n",
    "    #this is decoder\n",
    "    decoder_output = self.decoder_layer(input_k=dec,\n",
    "                                        input_q=dec,\n",
    "                                        input_v=dec,\n",
    "                                        encoder_output = encoder_output,\n",
    "                                        break_layer=1)\n",
    "    #fully connected layer\n",
    "    out = self.fc(decoder_output)\n",
    "    return out.squeeze()\n",
    "\n",
    "  def configure_optimizers(self):\n",
    "    return torch.optim.Adam(self.parameters())\n",
    "  \n",
    "  def training_step(self,batch,batch_ids):\n",
    "    input,ans,labels = batch\n",
    "    target_mask = (input[\"input_ids\"]!=0)\n",
    "    out = self(input,ans)\n",
    "    loss = self.loss(out.view(-1).float(),labels.view(-1).float()) \n",
    "    out = torch.masked_select(out,target_mask)\n",
    "    out = torch.sigmoid(out) \n",
    "    labels = torch.masked_select(labels,target_mask)    \n",
    "    self.log(\"train_loss\",loss,on_step=True,prog_bar=True)\n",
    "    return {\"loss\":loss,\"outs\":out,\"labels\":labels}\n",
    "  \n",
    "  def validation_step(self,batch,batch_ids):\n",
    "    input,ans,labels = batch\n",
    "    target_mask = (input[\"input_ids\"]!=0)\n",
    "    out = self(input,ans)\n",
    "    loss = self.loss(out.view(-1).float(),labels.view(-1).float())\n",
    "    out = torch.masked_select(out,target_mask)\n",
    "    pred = (torch.sigmoid(out) >= 0.5).long()\n",
    "    out = torch.sigmoid(out) \n",
    "    labels = torch.masked_select(labels,target_mask) \n",
    "    num_corrects = 0\n",
    "    num_total = 0\n",
    "    num_corrects += (pred == labels).sum().item()\n",
    "    num_total += len(labels)\n",
    "    acc = num_corrects / num_total\n",
    "    self.log(\"val_loss\",loss,on_step=True,prog_bar=True)\n",
    "    output = {\"outs\":out,\"labels\":labels,\"loss\":loss,\"acc\":acc}\n",
    "    return output\n",
    "  \n",
    "  def validation_epoch_end(self,validation_ouput): \n",
    "    out = torch.cat([i[\"outs\"] for i in validation_ouput]).view(-1) \n",
    "    labels = torch.cat([i[\"labels\"] for i in validation_ouput]).view(-1)\n",
    "    auc = roc_auc_score(labels.cpu().detach().numpy(),out.cpu().detach().numpy())\n",
    "    ave_loss = np.average([i[\"loss\"].cpu().detach().numpy()\n",
    "                            for i in validation_ouput])\n",
    "    acc_list = ([i[\"acc\"]\n",
    "                                for i in validation_ouput])\n",
    "    acc = acc_list[-1]\n",
    "    self.print(\"val acc\", acc)\n",
    "    self.log(\"val_acc\", acc)\n",
    "    self.print(\"val auc\", auc)\n",
    "    self.log(\"val_auc\", auc)\n",
    "    self.print(\"val loss\", ave_loss)\n",
    "    self.log(\"val_loss\", ave_loss)\n",
    "    \n",
    "  def test_step(self, batch, batch_idx):\n",
    "    input,ans,labels = batch\n",
    "    target_mask = (input[\"input_ids\"]!=0)\n",
    "    out = self(input,ans)\n",
    "    loss = self.loss(out.view(-1).float(),labels.view(-1).float())\n",
    "    out = torch.masked_select(out,target_mask)\n",
    "    pred = (torch.sigmoid(out) >= 0.5).long()\n",
    "    out = torch.sigmoid(out) \n",
    "    labels = torch.masked_select(labels,target_mask) \n",
    "    #num_corrects = 0\n",
    "    #num_total = 0\n",
    "    #num_corrects += (pred == labels).sum().item()\n",
    "    #num_total += len(labels)\n",
    "    #acc = num_corrects / num_total\n",
    "    self.log(\"test_loss\",loss,on_step=True,prog_bar=True)\n",
    "    output = {\"outs\":out,\"labels\":labels,\"loss\":loss}\n",
    "    return output\n",
    "\n",
    "  def test_epoch_end(self,test_ouput): \n",
    "    out = torch.cat([i[\"outs\"] for i in test_ouput]).view(-1) \n",
    "    labels = torch.cat([i[\"labels\"] for i in test_ouput]).view(-1)\n",
    "    auc = roc_auc_score(labels.cpu().detach().numpy(),out.cpu().detach().numpy())\n",
    "    ave_loss = np.average([i[\"loss\"].cpu().detach().numpy()\n",
    "                            for i in test_ouput])\n",
    "    #acc_list = ([i[\"acc\"]\n",
    "    #                            for i in test_ouput])\n",
    "    #acc = acc_list[-1]\n",
    "    #self.print(\"test acc\", acc)\n",
    "    #self.log(\"test_acc\", acc)\n",
    "    self.print(\"test auc\", auc)\n",
    "    self.log(\"test_auc\", auc)\n",
    "    self.print(\"test loss\", ave_loss)\n",
    "    self.log(\"test_loss\", ave_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.025185,
     "end_time": "2021-02-19T01:06:07.772540",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.747355",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Dataloader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:07.817869Z",
     "iopub.status.busy": "2021-02-19T01:06:07.815614Z",
     "iopub.status.idle": "2021-02-19T01:06:55.241681Z",
     "shell.execute_reply": "2021-02-19T01:06:55.242403Z"
    },
    "papermill": {
     "duration": 47.452715,
     "end_time": "2021-02-19T01:06:55.242600",
     "exception": false,
     "start_time": "2021-02-19T01:06:07.789885",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading data.....\n",
      "shape of train dataframe : (12703820, 7)\n",
      "shape of test dataframe : (259734, 7)\n"
     ]
    }
   ],
   "source": [
    "dtypes = {'timestamp': 'int64', 'user_id': 'int32' ,'content_id': 'int16',\n",
    "                'answered_correctly':'int8',\"content_type_id\":\"int8\",\n",
    "                  \"prior_question_elapsed_time\":\"float32\",\n",
    "              \"task_container_id\":\"int16\"}\n",
    "print(\"loading data.....\")\n",
    "train = pd.read_feather('../input/riiid-feather-files/train.feather',columns=set(dtypes.keys()))\n",
    "test_user=random.sample(list(train['user_id'].unique()),1000)\n",
    "test_df = train[train['user_id'].isin(test_user)]\n",
    "train_df = train.drop(train[train['user_id'].isin(test_user)].index)\n",
    "train_df = train_df[train_df['user_id'].isin(random.sample(list(train_df['user_id'].unique()),config.SAMPLE))]\n",
    "del train\n",
    "print(\"shape of train dataframe :\",train_df.shape) \n",
    "print(\"shape of test dataframe :\",test_df.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:06:55.304935Z",
     "iopub.status.busy": "2021-02-19T01:06:55.296215Z",
     "iopub.status.idle": "2021-02-19T01:08:18.911827Z",
     "shell.execute_reply": "2021-02-19T01:08:18.913002Z"
    },
    "papermill": {
     "duration": 83.650488,
     "end_time": "2021-02-19T01:08:18.913202",
     "exception": false,
     "start_time": "2021-02-19T01:06:55.262714",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train shape after exlusion: (12457576, 8)\n",
      "Grouping users...\n",
      "splitting\n",
      "train size:  (40000,) validation size:  (10000,)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "    questions_df=pd.read_feather('../input/riiid-feather-files/questions.feather')\n",
    "    questions_df.rename(columns={'question_id': 'content_id'}, inplace=True)\n",
    "    train_df=train_df[train_df.content_type_id==False]\n",
    "    train_df = train_df[train_df['answered_correctly'] != -1].reset_index(drop = True, inplace = False)\n",
    "    train_df=train_df.merge(questions_df[['content_id', 'part']], how='left')\n",
    "    #train_df=train_df.groupby('user_id').tail(config.MAX_SEQ*3)\n",
    "    \n",
    "    #print(\"shape of train dataframe :\",train_df.shape) \n",
    "    \n",
    "    train_df.prior_question_elapsed_time.fillna(0,inplace=True) \n",
    "    train_df.prior_question_elapsed_time /=1000 \n",
    "    train_df.prior_question_elapsed_time.clip(lower=0,upper=300,inplace=True)    \n",
    "    train_df.prior_question_elapsed_time = train_df.prior_question_elapsed_time.astype(np.int)    \n",
    "    train_df = train_df.sort_values([\"timestamp\"],ascending=True).reset_index(drop=True)\n",
    "    \n",
    "    print(\"train shape after exlusion:\",train_df.shape)\n",
    "\n",
    "    #grouping based on user_id to get the data supplu\n",
    "    print(\"Grouping users...\") \n",
    "    if config.lagtime == False:\n",
    "        group = train_df[[\"user_id\",\"content_id\",\"answered_correctly\",\"prior_question_elapsed_time\",\"part\"]]\\\n",
    "                    .groupby(\"user_id\")\\\n",
    "                    .apply(lambda r: (r.content_id.values,r.answered_correctly.values,\\\n",
    "                                      r.prior_question_elapsed_time.values,r.part.values))\n",
    "    else:\n",
    "        time_dict = dict()\n",
    "        train_df = feature_time_lag(train_df, time_dict)\n",
    "        del time_dict\n",
    "        train_df.time_lag.fillna(0,inplace=True) \n",
    "        train_df.time_lag /=1000 \n",
    "        train_df.time_lag.clip(lower=0,upper=300,inplace=True)    \n",
    "        train_df.time_lag = train_df.time_lag.astype(np.int)    \n",
    "        group = train_df[[\"user_id\",\"content_id\",\"answered_correctly\",\"time_lag\",\"part\"]]\\\n",
    "                    .groupby(\"user_id\")\\\n",
    "                    .apply(lambda r: (r.content_id.values,r.answered_correctly.values,\\\n",
    "                                      r.time_lag.values,r.part.values))\n",
    "    del train_df\n",
    "    gc.collect() \n",
    "    print(\"splitting\") \n",
    "    train,val = train_test_split(group,test_size=0.2,random_state=42) \n",
    "    print(\"train size: \",train.shape,\"validation size: \",val.shape)\n",
    "    train_dataset = DKTDataset(train,max_seq = config.MAX_SEQ)\n",
    "    val_dataset = DKTDataset(val,max_seq = config.MAX_SEQ)\n",
    "    \n",
    "    train_loader = DataLoader(train_dataset,\n",
    "                          batch_size=config.BATCH_SIZE,\n",
    "                          num_workers=8,\n",
    "                          shuffle=True) \n",
    "    val_loader = DataLoader(val_dataset,\n",
    "                          batch_size=config.BATCH_SIZE,\n",
    "                          num_workers=8,\n",
    "                          shuffle=False)\n",
    "    del train_dataset,val_dataset \n",
    "    gc.collect() \n",
    "\n",
    "#train_loader, val_loader = get_dataloaders() "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.027034,
     "end_time": "2021-02-19T01:08:18.969687",
     "exception": false,
     "start_time": "2021-02-19T01:08:18.942653",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:08:19.032093Z",
     "iopub.status.busy": "2021-02-19T01:08:19.031247Z",
     "iopub.status.idle": "2021-02-19T01:55:41.884794Z",
     "shell.execute_reply": "2021-02-19T01:55:41.885306Z"
    },
    "papermill": {
     "duration": 2842.888669,
     "end_time": "2021-02-19T01:55:41.885469",
     "exception": false,
     "start_time": "2021-02-19T01:08:18.996800",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "GPU available: True, used: True\n",
      "TPU available: False, using: 0 TPU cores\n",
      "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
      "\n",
      "  | Name              | Type                       | Params\n",
      "-----------------------------------------------------------------\n",
      "0 | loss              | BCEWithLogitsLoss          | 0     \n",
      "1 | encoder_layer     | StackedNMultiHeadAttention | 1.6 M \n",
      "2 | decoder_layer     | StackedNMultiHeadAttention | 1.6 M \n",
      "3 | encoder_embedding | EncoderEmbedding           | 7.0 M \n",
      "4 | decoder_embedding | DecoderEmbedding           | 30.2 K\n",
      "5 | _time             | Linear                     | 1.0 K \n",
      "6 | fc                | Linear                     | 513   \n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e636155cc739461b86892eaa209c6853",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validation sanity check', layout=Layout…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.5844308560677328\n",
      "val auc 0.5036863335957266\n",
      "val loss 0.67877495\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "eebe182de3604490990ae0e511722d2e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Training', layout=Layout(flex='2'), max…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c9dbb807938844b182fc2f0432d1e4bc",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.7577243746934772\n",
      "val auc 0.7292865657320924\n",
      "val loss 0.50962937\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "eb76c873d9334d829d747f7bbea05b21",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.7743992153016185\n",
      "val auc 0.7442565064407061\n",
      "val loss 0.49864376\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "57f6c2d415864207b6341c861648e51f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.77145659637077\n",
      "val auc 0.7594496631881196\n",
      "val loss 0.49259546\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a2af5575bbeb45f694ef5264bf2c5669",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.769494850416871\n",
      "val auc 0.7499772951331317\n",
      "val loss 0.5036231\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d36ee38078314e53817b32a815035904",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.7685139774399216\n",
      "val auc 0.7584243076444206\n",
      "val loss 0.48964912\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5ad17335b91f41a783de43b4d5f9591f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.7788131436978911\n",
      "val auc 0.7618790347312328\n",
      "val loss 0.4858561\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c4c08e8c85814ad187f53dc048382640",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.7601765571358509\n",
      "val auc 0.7632160347442325\n",
      "val loss 0.48997217\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4138f9337f1b4a199a7a8d6cebb4b7b1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.7719470328592447\n",
      "val auc 0.7614050368770462\n",
      "val loss 0.4909211\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1487507a03a14329a3493e346450e76a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.7783227072094164\n",
      "val auc 0.7648964978515296\n",
      "val loss 0.48372167\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9b7da21f748249e2a1a3f3fa676254ef",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Validating', layout=Layout(flex='2'), m…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "val acc 0.77145659637077\n",
      "val auc 0.7648540013219329\n",
      "val loss 0.48358694\n",
      "\n",
      "CPU times: user 45min 44s, sys: 28.6 s, total: 46min 12s\n",
      "Wall time: 47min 22s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "saint_plus = PlusSAINTModule()\n",
    "callback = pl.callbacks.ModelCheckpoint(monitor='val_loss_epoch',save_top_k=1,mode='min')\n",
    "trainer = pl.Trainer(gpus=-1,max_epochs=config.EPOCHS,progress_bar_refresh_rate=1,callbacks = [callback]) \n",
    "trainer.fit(model=saint_plus,\n",
    "            train_dataloader=train_loader, \n",
    "            val_dataloaders = [val_loader,]\n",
    "            ) \n",
    "\n",
    "#trainer.save_checkpoint(\"model.pt\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "papermill": {
     "duration": 0.033364,
     "end_time": "2021-02-19T01:55:41.952040",
     "exception": false,
     "start_time": "2021-02-19T01:55:41.918676",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:55:42.064019Z",
     "iopub.status.busy": "2021-02-19T01:55:42.042881Z",
     "iopub.status.idle": "2021-02-19T01:55:43.889799Z",
     "shell.execute_reply": "2021-02-19T01:55:43.888530Z"
    },
    "papermill": {
     "duration": 1.900642,
     "end_time": "2021-02-19T01:55:43.889918",
     "exception": false,
     "start_time": "2021-02-19T01:55:41.989276",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test shape after exlusion: (255276, 8)\n",
      "test size:  (1000,)\n"
     ]
    }
   ],
   "source": [
    "test_df=test_df[test_df.content_type_id==False]\n",
    "test_df = test_df[test_df['answered_correctly'] != -1].reset_index(drop = True, inplace = False)\n",
    "test_df=test_df.merge(questions_df[['content_id', 'part']], how='left')\n",
    "test_df.prior_question_elapsed_time.fillna(0,inplace=True)\n",
    "test_df.prior_question_elapsed_time /=1000 \n",
    "test_df.prior_question_elapsed_time.clip(lower=0,upper=300,inplace=True)\n",
    "test_df.prior_question_elapsed_time = test_df.prior_question_elapsed_time.astype(np.int)\n",
    "print(\"test shape after exlusion:\",test_df.shape)\n",
    "if config.lagtime == False:\n",
    "    test_group = test_df[[\"user_id\",\"content_id\",\"answered_correctly\",\"prior_question_elapsed_time\",\"part\"]]\\\n",
    "                    .groupby(\"user_id\")\\\n",
    "                    .apply(lambda r: (r.content_id.values,r.answered_correctly.values,\\\n",
    "                                      r.prior_question_elapsed_time.values,r.part.values))\n",
    "else:\n",
    "    time_dict = dict()\n",
    "    test_df = feature_time_lag(test_df, time_dict)\n",
    "    del time_dict\n",
    "    test_df.time_lag.fillna(0,inplace=True) \n",
    "    test_df.time_lag /=1000 \n",
    "    test_df.time_lag.clip(lower=0,upper=300,inplace=True)    \n",
    "    test_df.time_lag = test_df.time_lag.astype(np.int)    \n",
    "    test_group = test_df[[\"user_id\",\"content_id\",\"answered_correctly\",\"time_lag\",\"part\"]]\\\n",
    "                    .groupby(\"user_id\")\\\n",
    "                    .apply(lambda r: (r.content_id.values,r.answered_correctly.values,\\\n",
    "                                      r.time_lag.values,r.part.values))\n",
    "print(\"test size: \",test_group.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:55:43.986188Z",
     "iopub.status.busy": "2021-02-19T01:55:43.970810Z",
     "iopub.status.idle": "2021-02-19T01:55:44.016425Z",
     "shell.execute_reply": "2021-02-19T01:55:44.016969Z"
    },
    "papermill": {
     "duration": 0.091611,
     "end_time": "2021-02-19T01:55:44.017092",
     "exception": false,
     "start_time": "2021-02-19T01:55:43.925481",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "test_dataset = DKTDataset(test_group,max_seq = config.MAX_SEQ)\n",
    "test_loader = DataLoader(test_dataset,\n",
    "                          batch_size=config.BATCH_SIZE,\n",
    "                          num_workers=8,\n",
    "                          shuffle=False) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:55:44.096783Z",
     "iopub.status.busy": "2021-02-19T01:55:44.096105Z",
     "iopub.status.idle": "2021-02-19T01:55:44.125926Z",
     "shell.execute_reply": "2021-02-19T01:55:44.125270Z"
    },
    "papermill": {
     "duration": 0.073589,
     "end_time": "2021-02-19T01:55:44.126042",
     "exception": false,
     "start_time": "2021-02-19T01:55:44.052453",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/kaggle/working/lightning_logs/version_0/checkpoints/epoch=9.ckpt\n",
      "tensor(0.4840, device='cuda:0')\n"
     ]
    }
   ],
   "source": [
    "print(trainer.checkpoint_callback.best_model_path)\n",
    "print(trainer.checkpoint_callback.best_model_score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-02-19T01:55:44.203000Z",
     "iopub.status.busy": "2021-02-19T01:55:44.201897Z",
     "iopub.status.idle": "2021-02-19T01:55:48.075988Z",
     "shell.execute_reply": "2021-02-19T01:55:48.076725Z"
    },
    "papermill": {
     "duration": 3.915181,
     "end_time": "2021-02-19T01:55:48.076904",
     "exception": false,
     "start_time": "2021-02-19T01:55:44.161723",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "GPU available: True, used: True\n",
      "TPU available: False, using: 0 TPU cores\n",
      "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "194e663699354fdeb8e00f68a4e30b46",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', description='Testing', layout=Layout(flex='2'), max=…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test auc 0.7655655685204239\n",
      "test loss 0.48228472\n",
      "--------------------------------------------------------------------------------\n",
      "DATALOADER:0 TEST RESULTS\n",
      "{'test_auc': 0.7655655685204239,\n",
      " 'test_loss': tensor(0.3455, device='cuda:0'),\n",
      " 'test_loss_epoch': tensor(0.4888, device='cuda:0')}\n",
      "--------------------------------------------------------------------------------\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[{'test_auc': 0.7655655685204239,\n",
       "  'test_loss': 0.3454764187335968,\n",
       "  'test_loss_epoch': 0.48878923058509827}]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_clone = saint_plus.load_from_checkpoint(trainer.checkpoint_callback.best_model_path)\n",
    "trainer_clone = pl.Trainer(gpus=-1,max_epochs=config.EPOCHS) \n",
    "trainer_clone.test(model_clone,test_loader)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "papermill": {
   "duration": 2990.591453,
   "end_time": "2021-02-19T01:55:48.757123",
   "environment_variables": {},
   "exception": null,
   "input_path": "__notebook__.ipynb",
   "output_path": "__notebook__.ipynb",
   "parameters": {},
   "start_time": "2021-02-19T01:05:58.165670",
   "version": "2.1.0"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "0018419803424f0fbd87d08cd4ca22ee": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "01b5cb64ff294460be5152f25b0db939": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "0331c9c9173d48f684aaaae013a21cb8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "05bff492f6be475880da0379b3625072": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_6ddd9c433596433fbe26a341c4a22baf",
       "placeholder": "​",
       "style": "IPY_MODEL_2db787a9e9be4dc4bd1ef79c7c75fb6e",
       "value": " 188/188 [00:28&lt;00:00,  7.40it/s]"
      }
     },
     "1017152c3d68459cbff70837d11eaef8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_1b5550246d1a42f2937ee314243a8f03",
       "placeholder": "​",
       "style": "IPY_MODEL_0018419803424f0fbd87d08cd4ca22ee",
       "value": " 188/188 [00:27&lt;00:00,  7.40it/s]"
      }
     },
     "1265a4a3225e4570ab012e8356d65e8d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "1487507a03a14329a3493e346450e76a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_c1016632c89f414db33b31a44e633ece",
        "IPY_MODEL_36f10e82c2a54a299bbe661b6fa238a6"
       ],
       "layout": "IPY_MODEL_8580365aac6b42c79173d69760b6ca8b"
      }
     },
     "14ed509c0f3b4d7b9131731b3e384794": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_6104cce584a34bfab48b88a87ca46d68",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_f77c0aae1d6a499c8867753a2df860b4",
       "value": 1.0
      }
     },
     "150234b21651410dbfe11db2c8857044": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "182a1266c9c84c17b388d13fe4a8fdec": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "194e663699354fdeb8e00f68a4e30b46": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_f88944bf0bb7422fb17f0a6a359dee83",
        "IPY_MODEL_cfd6cb00a99445199f540479c9542f12"
       ],
       "layout": "IPY_MODEL_ab4f770b205941fe81c6aaa42ec32f9e"
      }
     },
     "1ad70516e40d48f5bbb009d3ecddab84": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "1b5550246d1a42f2937ee314243a8f03": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "1e6b4688f4604f8782c8e38bdd032931": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "1f08fc73567046bd94112b820e87dcc4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "20459c5c6e4040ba9b084d22f8cf7e69": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_db7d4b1e48af4bf4b732fca42b8fc02c",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_d4ad4437753140c6b6c3e41235861ff6",
       "value": 1.0
      }
     },
     "223833641662480680036ccddace7192": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "Epoch 9: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_44521121d7584d978f276db79c5a85bc",
       "max": 982.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_aa5afa0a9c594763b9ef3e09ef84b0cb",
       "value": 982.0
      }
     },
     "2375ba238f3247249da165805a93ca2d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "2433cf4d9f3e4fd0b84b01a276887376": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "25741c996dcd40a1bdf16c3fff247438": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "2cf7dd212eb5480198068bd1714f9c87": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "2db787a9e9be4dc4bd1ef79c7c75fb6e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "2fbd62ff911d435590ce6336cef7a0a0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "36f10e82c2a54a299bbe661b6fa238a6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_e08d7276ceee41cc853f626d0eb4b674",
       "placeholder": "​",
       "style": "IPY_MODEL_fed09409b22d4a4d9b5fe562361f72fa",
       "value": " 188/188 [00:28&lt;00:00,  7.38it/s]"
      }
     },
     "383b32aae30747f0a998d56067e34b80": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "3c866cd54de04301b37e3e0c22c95cee": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_b124d111dc19416b8096e2ba930e3cf5",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_383b32aae30747f0a998d56067e34b80",
       "value": 1.0
      }
     },
     "3d62ddc094094b9ba29d2e5d229f3f29": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "4138f9337f1b4a199a7a8d6cebb4b7b1": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_5ced22dfe8a947a0ae7a3adeabbcd6fd",
        "IPY_MODEL_f36b2bf730614702913d38b23fbc6e23"
       ],
       "layout": "IPY_MODEL_9d535c3f8ce3400393f124a80cac7268"
      }
     },
     "44521121d7584d978f276db79c5a85bc": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "45bb69a9041f46ee89286be95d87b30d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_8a3e9f46056d4b0bb71beb770a3aadaa",
       "placeholder": "​",
       "style": "IPY_MODEL_ba64813c2f6c464aa5855f4b9bfd22ce",
       "value": " 982/982 [04:42&lt;00:00,  3.48it/s, loss=0.479, v_num=0, val_loss_step=0.397, train_loss=0.488, val_loss_epoch=0.484]"
      }
     },
     "4b69c5aadc2740cb9a15e0aa06c86e40": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "50953d7b1a2f4ac18e1508803f98114b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "5107f22aff214f5c95a570a4762cdb90": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "513e57eb62b34a26a3395949187e0fa7": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_01b5cb64ff294460be5152f25b0db939",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_67c050c5833542109f0fede800d6bc2e",
       "value": 1.0
      }
     },
     "5143c25aa6a9473a88adad9e2a7e3b2a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "51ad167c3d0c42ca9db2a5c903cd4780": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_5f5283db384741a89a7f76d3ac44d5bf",
       "placeholder": "​",
       "style": "IPY_MODEL_1f08fc73567046bd94112b820e87dcc4",
       "value": " 188/188 [00:27&lt;00:00,  7.39it/s]"
      }
     },
     "5513bed44af34929ae006f51249842b3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "556f063fa9274c08bca78a64757879da": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "57f6c2d415864207b6341c861648e51f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_20459c5c6e4040ba9b084d22f8cf7e69",
        "IPY_MODEL_7d9c7a5af1004b11a5e57ec169b6f2af"
       ],
       "layout": "IPY_MODEL_1265a4a3225e4570ab012e8356d65e8d"
      }
     },
     "59eae9b9491b492391e9d30eaa23e33b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_150234b21651410dbfe11db2c8857044",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_ca7324488c7c41f5a0b73a92b9591619",
       "value": 1.0
      }
     },
     "5ad17335b91f41a783de43b4d5f9591f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_eaa6ae14cc0b48f18c7d1a8430b11926",
        "IPY_MODEL_7242e17e7db6460aa6c9dedbf7f24707"
       ],
       "layout": "IPY_MODEL_605e99e695844913bc379cf1fee0d7e8"
      }
     },
     "5ced22dfe8a947a0ae7a3adeabbcd6fd": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_c1f74b1a4dff48fb8af275bb81e01a77",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_a5bc95dd17954a9d89c8240384f8a2ed",
       "value": 1.0
      }
     },
     "5e4cdfdcd45549d0b6283187faecc1f0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "5f5283db384741a89a7f76d3ac44d5bf": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "605e99e695844913bc379cf1fee0d7e8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "6066a3e43b504fc899ac37e18262d03a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "6104cce584a34bfab48b88a87ca46d68": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "67c050c5833542109f0fede800d6bc2e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "6ddd9c433596433fbe26a341c4a22baf": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "6f485c4d5cc34f4bbf8225cb587fcaa9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "7242e17e7db6460aa6c9dedbf7f24707": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_edf80ab56ef448609abfab9237882dc5",
       "placeholder": "​",
       "style": "IPY_MODEL_d88412f05c714c488e3b9fec14977c33",
       "value": " 188/188 [00:27&lt;00:00,  7.38it/s]"
      }
     },
     "72f4225749fe426e87917ad6cbff52a5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "757b562334b74cc79a8a6fd79c589118": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_72f4225749fe426e87917ad6cbff52a5",
       "placeholder": "​",
       "style": "IPY_MODEL_7a8bf84f205d48038d012762bc8ce2b9",
       "value": " 188/188 [00:27&lt;00:00,  7.38it/s]"
      }
     },
     "7a04452e13714ea99b5c81b445b5300f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "7a8bf84f205d48038d012762bc8ce2b9": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "7d9c7a5af1004b11a5e57ec169b6f2af": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_50953d7b1a2f4ac18e1508803f98114b",
       "placeholder": "​",
       "style": "IPY_MODEL_1ad70516e40d48f5bbb009d3ecddab84",
       "value": " 188/188 [00:28&lt;00:00,  7.37it/s]"
      }
     },
     "84a50410044f46bdbe38a42fd86c175a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "8580365aac6b42c79173d69760b6ca8b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "8698cdc3c1124d9b9af020d251194bf9": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "8a3e9f46056d4b0bb71beb770a3aadaa": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "91ece2e34941455e8a1d0a7a0ad25880": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_f3dd5a017b6044b4b4813cea82a1d7f6",
       "placeholder": "​",
       "style": "IPY_MODEL_6066a3e43b504fc899ac37e18262d03a",
       "value": " 2/2 [00:03&lt;00:00,  2.35s/it]"
      }
     },
     "938ed61b9f2041c88899b452b280a045": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "93a7ee21a5b74bcbb34727b7f5783402": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validation sanity check: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_b1a2920b38e0414296b99dea43458e88",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_2433cf4d9f3e4fd0b84b01a276887376",
       "value": 1.0
      }
     },
     "94e782212ef2434384f38fc24524ef66": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "991336a6a104436ea3fe66b2dc9421cb": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "9b7da21f748249e2a1a3f3fa676254ef": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_14ed509c0f3b4d7b9131731b3e384794",
        "IPY_MODEL_51ad167c3d0c42ca9db2a5c903cd4780"
       ],
       "layout": "IPY_MODEL_c4ee5449d5a3491db9de949eb5560ead"
      }
     },
     "9d535c3f8ce3400393f124a80cac7268": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "a2af5575bbeb45f694ef5264bf2c5669": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_d977b43656c24e6b8dde3c55799a0601",
        "IPY_MODEL_1017152c3d68459cbff70837d11eaef8"
       ],
       "layout": "IPY_MODEL_4b69c5aadc2740cb9a15e0aa06c86e40"
      }
     },
     "a5bc95dd17954a9d89c8240384f8a2ed": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "aa5afa0a9c594763b9ef3e09ef84b0cb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "ab4f770b205941fe81c6aaa42ec32f9e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "b124d111dc19416b8096e2ba930e3cf5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "b1a2920b38e0414296b99dea43458e88": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "b9ff1b297e434ee09fe3b835890b6ab5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_5143c25aa6a9473a88adad9e2a7e3b2a",
       "placeholder": "​",
       "style": "IPY_MODEL_c75fba1427334f43beedb84d36a5e5ca",
       "value": " 188/188 [00:27&lt;00:00,  7.38it/s]"
      }
     },
     "ba64813c2f6c464aa5855f4b9bfd22ce": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "bc1b8fbb59334c7496d26053c03eb7ae": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "c1016632c89f414db33b31a44e633ece": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_3d62ddc094094b9ba29d2e5d229f3f29",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_556f063fa9274c08bca78a64757879da",
       "value": 1.0
      }
     },
     "c1f74b1a4dff48fb8af275bb81e01a77": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c4c08e8c85814ad187f53dc048382640": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_513e57eb62b34a26a3395949187e0fa7",
        "IPY_MODEL_757b562334b74cc79a8a6fd79c589118"
       ],
       "layout": "IPY_MODEL_6f485c4d5cc34f4bbf8225cb587fcaa9"
      }
     },
     "c4ee5449d5a3491db9de949eb5560ead": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "c75fba1427334f43beedb84d36a5e5ca": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "c8bbec364bf741529c6f3c3745c79bf2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c9dbb807938844b182fc2f0432d1e4bc": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_3c866cd54de04301b37e3e0c22c95cee",
        "IPY_MODEL_05bff492f6be475880da0379b3625072"
       ],
       "layout": "IPY_MODEL_1e6b4688f4604f8782c8e38bdd032931"
      }
     },
     "ca7324488c7c41f5a0b73a92b9591619": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "cefacdf721b54a769b51b2c45f3507e5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": "inline-flex",
       "flex": null,
       "flex_flow": "row wrap",
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": "100%"
      }
     },
     "cfd6cb00a99445199f540479c9542f12": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_25741c996dcd40a1bdf16c3fff247438",
       "placeholder": "​",
       "style": "IPY_MODEL_0331c9c9173d48f684aaaae013a21cb8",
       "value": " 21/21 [00:03&lt;00:00,  5.78it/s]"
      }
     },
     "d36ee38078314e53817b32a815035904": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_59eae9b9491b492391e9d30eaa23e33b",
        "IPY_MODEL_e5915c053e0043579431585314e84683"
       ],
       "layout": "IPY_MODEL_991336a6a104436ea3fe66b2dc9421cb"
      }
     },
     "d4ad4437753140c6b6c3e41235861ff6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "d88412f05c714c488e3b9fec14977c33": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     },
     "d977b43656c24e6b8dde3c55799a0601": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_c8bbec364bf741529c6f3c3745c79bf2",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_8698cdc3c1124d9b9af020d251194bf9",
       "value": 1.0
      }
     },
     "d9b2c8f8369246b18e27884b920fff75": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_2fbd62ff911d435590ce6336cef7a0a0",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_2375ba238f3247249da165805a93ca2d",
       "value": 1.0
      }
     },
     "db7d4b1e48af4bf4b732fca42b8fc02c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": "2",
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "e08d7276ceee41cc853f626d0eb4b674": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "e5915c053e0043579431585314e84683": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_7a04452e13714ea99b5c81b445b5300f",
       "placeholder": "​",
       "style": "IPY_MODEL_2cf7dd212eb5480198068bd1714f9c87",
       "value": " 188/188 [00:28&lt;00:00,  7.38it/s]"
      }
     },
     "e636155cc739461b86892eaa209c6853": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_93a7ee21a5b74bcbb34727b7f5783402",
        "IPY_MODEL_91ece2e34941455e8a1d0a7a0ad25880"
       ],
       "layout": "IPY_MODEL_cefacdf721b54a769b51b2c45f3507e5"
      }
     },
     "eaa6ae14cc0b48f18c7d1a8430b11926": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "info",
       "description": "Validating: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_94e782212ef2434384f38fc24524ef66",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_5107f22aff214f5c95a570a4762cdb90",
       "value": 1.0
      }
     },
     "eb76c873d9334d829d747f7bbea05b21": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_d9b2c8f8369246b18e27884b920fff75",
        "IPY_MODEL_b9ff1b297e434ee09fe3b835890b6ab5"
       ],
       "layout": "IPY_MODEL_938ed61b9f2041c88899b452b280a045"
      }
     },
     "edf80ab56ef448609abfab9237882dc5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "eebe182de3604490990ae0e511722d2e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_223833641662480680036ccddace7192",
        "IPY_MODEL_45bb69a9041f46ee89286be95d87b30d"
       ],
       "layout": "IPY_MODEL_5e4cdfdcd45549d0b6283187faecc1f0"
      }
     },
     "f36b2bf730614702913d38b23fbc6e23": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_tooltip": null,
       "layout": "IPY_MODEL_84a50410044f46bdbe38a42fd86c175a",
       "placeholder": "​",
       "style": "IPY_MODEL_bc1b8fbb59334c7496d26053c03eb7ae",
       "value": " 188/188 [00:27&lt;00:00,  7.36it/s]"
      }
     },
     "f3dd5a017b6044b4b4813cea82a1d7f6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "1.2.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "overflow_x": null,
       "overflow_y": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "f77c0aae1d6a499c8867753a2df860b4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": "initial"
      }
     },
     "f88944bf0bb7422fb17f0a6a359dee83": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "1.5.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "Testing: 100%",
       "description_tooltip": null,
       "layout": "IPY_MODEL_182a1266c9c84c17b388d13fe4a8fdec",
       "max": 1.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_5513bed44af34929ae006f51249842b3",
       "value": 1.0
      }
     },
     "fed09409b22d4a4d9b5fe562361f72fa": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "1.5.0",
       "_model_name": "DescriptionStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "1.2.0",
       "_view_name": "StyleView",
       "description_width": ""
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
